home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / Yerk 3.64 / Asm source / BuildRegMask < prev    next >
Text File  |  1986-03-14  |  2KB  |  67 lines

  1. \ BuildRegMask                  ReeseWarner                         5/13
  2. \  for MOVEM
  3. \  03/06/86  GDC  fixed MOVEM
  4. 0 -> dlevel
  5.  
  6. operand exPtr
  7.  
  8. \  is first char in string = char?
  9. : Char= { addr len char -- bool }
  10.     addr c@ char =
  11. ;
  12.  
  13. \  for / in MOVEM
  14. : setReg    { mode reg# flag work \ shift -- work }
  15.  
  16.     flag
  17.     IF                                      \ if regular mask
  18.         mode 8 * reg# + 1 swap << work or -> work
  19.     ELSE
  20.         mode 0=
  21.         IF
  22.             8 -> shift
  23.         ELSE
  24.             0 -> shift
  25.         THEN
  26.         8 reg# - ++> shift
  27.         1 shift 1- << work or -> work
  28.     THEN
  29.     work val" work is "
  30. ;
  31.  
  32. \ Flag indicates whether it is regular or pre-decrement
  33. \  1 = regular
  34. \  0 = predecrement
  35. \  modes   0 data register
  36. \          1 address register
  37. : BuildRegMask  { opPtr flag \ tokentype work -- regMask }
  38.     0 -> work
  39.     BEGIN
  40.         nextToken -> tokentype         \ if next token is , or eol then
  41.         get: token ascii , char=       \ get out
  42.         tokentype eol = or not
  43.     WHILE
  44.         msg" in WHILE "
  45.         get: token ascii / char=
  46.         IF
  47.             msg" IT'S A / "
  48.             mode: opPtr reg: opPtr flag work setReg -> work
  49.             opPtr getOp
  50.          ELSE
  51.             msg" ITSA something else "
  52.             exPtr getOp
  53.             mode: opPtr mode: exPtr = not
  54.             IF
  55.                 210 asmError
  56.             ELSE
  57.                 reg: exPtr 1+ reg: opPtr
  58.                 DO
  59.                     mode: opPtr i flag work setReg -> work
  60.                 LOOP
  61.             THEN
  62.         THEN
  63.     REPEAT
  64.     mode: opPtr reg: opPtr flag work setReg -> work
  65.     work
  66. ;
  67.